<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace app\model\system;

use hdphp\basic\BaseModel;
use hdphp\traits\ModelTrait;
use think\Model;

/**
 * Class：系统菜单模型
 * 创建人：Jack
 * 创建时间：2023/7/29 17:58
 * @package app\model\system
 */
class SystemMenus extends BaseModel
{
    use ModelTrait;

    /**
     * 数据表主键
     * @var string
     */
    protected $pk = 'id';

    /**
     * 模型名称
     * @var string
     */
    protected $name = 'system_menus';

    /**
     * 注释：参数修改器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:53 PM
     * @param $value
     * @return false|string
     */
    public function setParamsAttr($value)
    {
        $value = $value ? explode('/', $value) : [];
        $params = array_chunk($value, 2);
        $data = [];
        foreach ($params as $param) {
            if (isset($param[0]) && isset($param[1])) $data[$param[0]] = $param[1];
        }
        return json_encode($data);
    }

    /**
     * 注释：参数获取器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:53 PM
     * @param $_value
     * @return mixed
     */
    public function getParamsAttr($_value)
    {
        return is_string($_value) ? json_decode($_value, true) : $_value;
    }

    /**
     * 注释：pid获取器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:54 PM
     * @param $value
     * @return mixed|string
     */
    public function getPidAttr($value)
    {
        return !$value ? '顶级' : $this->where('pid', $value)->value('menu_name');
    }

    /**
     * 注释：默认条件查询器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:54 PM
     * @param Model $query
     * @return void
     */
    public function searchDefaultAttr($query)
    {
        $query->where(['is_show' => 1, 'is_access' => 1]);
    }

    /**
     * 注释：是否显示搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:55 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchIsShowAttr($query, $value)
    {
        if ($value != '') {
            $query->where('is_show', $value);
        }
    }

    /**
     * 注释：是否删除搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:57 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchIsDeleteAttr($query, $value)
    {
        $query->where('is_delete', $value);
    }

    /**
     * 注释：Pid搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:57 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchPidAttr($query, $value)
    {
        $query->where('pid', $value ?? 0);
    }

    /**
     * 注释：角色搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:57 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchRuleAttr($query, $value)
    {
        $query->whereIn('id', $value)->where('is_delete', 0)->whereOr('pid', 0);
    }

    /**
     * 注释：搜索菜单
     * 创建人：Jack
     * 创建时间：2023/7/29 6:58 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchKeywordAttr($query, $value)
    {
        if ($value != '') {
            $query->whereLike('menu_name|menu_path|unique_auth|api_url|id|pid', "%$value%");
        }
    }

    /**
     * 注释：方法搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:59 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchActionAttr($query, $value)
    {
        $query->where('action', $value);
    }

    /**
     * 注释：控制器搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:59 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchControllerAttr($query, $value)
    {
        $query->where('controller', lcfirst($value));
    }

    /**
     * 注释：API接口地址搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 6:59 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchUrlAttr($query, $value)
    {
        $query->where('api_url', $value);
    }

    /**
     * 注释：参数搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 7:00 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchParamsAttr($query, $value)
    {
        $query->where(function ($query) use ($value) {
            $query->where('params', $value)->whereOr('params', "'[]'");
        });
    }

    /**
     * 注释：权限标识搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 7:00 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchUniqueAttr($query, $value)
    {
        $query->where('is_delete', 0);
        if ($value) {
            $query->whereIn('id', $value);
        }
    }

    /**
     * 注释：菜单规格搜索
     * 创建人：Jack
     * 创建时间：2023/7/29 7:01 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchRouteAttr($query, $value)
    {
        $query->where('is_show', 1)->where('is_delete', 0);
        if ($value) {
            $query->whereIn('id', $value);
        }
    }

    /**
     * 注释：Id搜索器
     * 创建人：Jack
     * 创建时间：2023/7/29 7:01 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchIdAttr($query, $value)
    {
        $query->whereIn('id', $value);
    }

    /**
     * 注释：searchIsShowPathAttr
     * 创建人：Jack
     * 创建时间：2023/7/29 7:01 PM
     * @param Model $query
     * @param $value
     * @return void
     */
    public function searchIsShowPathAttr($query, $value)
    {
        $query->where('is_show_path', $value);
    }


}
